package com.xjj.test.demo.testcase;

import com.sword.commons.HttpClient.HttpResponse;
import com.sword.woodpecker.autotest.framework.assertion.Validate;
import com.sword.woodpecker.autotest.framework.testcase.TestCase;
import com.xjj.test.demo.DemoApplication;
import com.xjj.test.demo.service.IHttpService2;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.testng.Assert;
import org.testng.annotations.Test;

/**
 * 类描述:〈接口测试用例Demo〉
 */
@SpringBootTest(classes = {DemoApplication.class})
public class Demo2TC extends TestCase {

  @Autowired
  protected IHttpService2 iHttpService2;

  //采用代理类的方式去发送Http请求，也就是你自定义的是HttpApi类的这种模式
  @Test
  public void test1() {
    //post请求地址
    String url = "http://localhost:8686/demo/user/get";

    //发送get请求，并获取请求结果
    HttpResponse response = iHttpService2.get(url);

    //校验请求结果

    //校验状态码是否为200
    int statusCode = response.getStatus().getStatusCode();
    //采用软校验，当校验不通过，会继续执行用例后续的步骤
    Validate.isEquals(200, statusCode, "断言状态码为200");

    //校验结束
    //用例无后续流程，也结束
  }

  //采用代理类的方式去发送Http请求，也就是你自定义的是HttpApi类的这种模式
  @Test(testName = "注册成功用例")
  public void test2() {
    //post请求地址
    String url = "http://localhost:8686/demo/user/register";

    //组装请求参数
    String param = "{\n"
        + "\t\"userName\":\"test1\",\n"
        + "\t\"password\":\"123456\"\n"
        + "}";

    //发送post请求，并获取请求结果
    HttpResponse response = iHttpService2.post(url, param);

    //校验请求结果

    //校验状态码是否为200
    int statusCode = response.getStatus().getStatusCode();
    //采用软校验，当校验不通过，会继续执行用例后续的步骤
    Validate.isEquals(200, statusCode, "断言状态码为200");

    //校验返回内容是否为：注册用户成功
    String result = response.getContent();
    //采用软校验，当校验不通过，会继续执行用例后续的步骤
    Validate.isEquals("注册用户成功", result, "断言返回内容为：注册用户成功");

    //校验结束
    //用例无后续流程，也结束
  }

  //采用代理类的方式去发送Http请求，也就是你自定义的是HttpApi类的这种模式
  @Test(testName = "注册失败用例：用户名为空")
  public void test3() {
    //post请求地址
    String url = "http://localhost:8686/demo/user/register";

    //组装请求参数
    String param = "{\n"
        + "\t\"userName\":\"\",\n"
        + "\t\"password\":\"123456\"\n"
        + "}";

    //发送post请求，并获取请求结果
    HttpResponse response = iHttpService2.post(url, param);

    //校验请求结果

    //校验状态码是否为200
    int statusCode = response.getStatus().getStatusCode();
    //采用软校验，当校验不通过，会继续执行用例后续的步骤
    Validate.isEquals(200, statusCode, "断言状态码为200");

    //校验返回内容是否为：注册用户成功
    String result = response.getContent();
    //采用软校验，当校验不通过，会继续执行用例后续的步骤
    Validate.isEquals("注册用户成功", result, "断言返回内容为：注册用户成功");

    //校验结束
    //用例无后续流程，也结束
  }

  //采用代理类的方式去发送Http请求，也就是你自定义的是HttpApi类的这种模式
  @Test(testName = "注册失败用例：请求参数格式错误")
  public void test4() {
    //post请求地址
    String url = "http://localhost:8686/demo/user/register";

    //组装请求参数
    Map<String, Object> param = new HashMap<>();
    param.put("userName", "user1");
    param.put("password", "123456");

    //发送post请求，并获取请求结果
    HttpResponse response = iHttpService2.post(url, param);

    //校验请求结果

    //校验状态码是否为200
    int statusCode = response.getStatus().getStatusCode();
    //采用软校验，当校验不通过，会继续执行用例后续的步骤
    Validate.isEquals(200, statusCode, "断言状态码为200");

    //校验返回内容是否为：注册用户成功
    String result = response.getContent();
    //采用软校验，当校验不通过，会继续执行用例后续的步骤
    Assert.assertEquals(result, "注册用户成功");
    Validate.isEquals("注册用户成功", result, "断言返回内容为：注册用户成功");

    //校验结束
    //用例无后续流程，也结束
  }

}
